package main

import "fmt"

// 用顺序函数过滤容器：s 是前 10 个整型的切片。
// 构造一个函数 Filter，第一个参数是 s，
// 第二个参数是一个 fn func(int) bool，返回满足函数 fn 的元素切片。
// 通过 fn 测试方法测试当整型值是偶数时的情况。

type filter func(int) bool

func filterInt(s []int, f filter) (r []int) {
	for _, item := range s {
		if f(item) {
			r = append(r, item)
		}
	}
	return
}

func isOdd(d int) bool {
	return d%2 != 0
}

func isEven(d int) bool {
	return d%2 == 0
}

func main() {
	s := []int{1, 2, 3, 6, 7, 8}
	fmt.Println("odd is: ", filterInt(s, isOdd))
	fmt.Println("even is: ", filterInt(s, isEven))
}
